package DAO;


import DTO.Usuario;
import java.util.Date;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Windows
 */
public class UsuarioDAO extends UtilDao{
    
    
    /*
    public List getUsuario(String id) {
        List<Usuario> usersList = null;
        try {
            tx = sesion.beginTransaction();
            //Query q = sesion.createQuery ("from Usuarios as usuario where id='"+id+"'");
            Query q = sesion.createQuery ("from Usuario as usuario");
            usersList = (List<Usuario>) q.list();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return usersList;
    }*/
    
    public Usuario getUsuarioById(String id){
        Usuario user = new Usuario();        
        try {
            tx = sesion.beginTransaction();
            Query q = sesion.createQuery ("FROM Usuario AS usuario WHERE id='"+id+"'");
            List<Usuario> usersList = (List<Usuario>) q.list();
            user = usersList.size()>0?usersList.get(0):user;
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            return user;
        }
    }
    public Usuario getUsuarioByUserPass(String userStr, String passStr){
        Usuario user = new Usuario();        
        try {
            tx = sesion.beginTransaction();
            Query q = sesion.createQuery ("FROM Usuario AS usuario "+
                "WHERE username='" + userStr + "' AND pass = '" + passStr + "'");
            List<Usuario> usersList = (List<Usuario>) q.list();
            user = usersList.size()>0?usersList.get(0):user;
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            return user;
        }
    }
    
    
    public void updateLastLogin(Usuario usuario){
        try {
            tx = sesion.beginTransaction();
            usuario.setUltimoAcceso( new Date() );
            sesion.update(usuario);
            tx.commit();
        }catch (Exception e) {
            e.printStackTrace();
        }        
    }
    
    /*
    public void update(Usuario usuario){
        try {
            tx = sesion.beginTransaction();
            sesion.update(usuario);
            tx.commit();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public int count(){
        try {
            tx = sesion.beginTransaction();
            return sesion.createQuery("from Usuario").list().size();
        }catch (Exception e) {            
            e.printStackTrace();
            return 0;
        }
    }*/
    public int countByStatus(tipos.UsuarioStatus status){
        try {
            tx = sesion.beginTransaction();
            return sesion.createQuery("FROM Usuario WHERE status = '"
                + status.toString() +"'").list().size();
        }catch (Exception e) {            
            e.printStackTrace();
            return 0;
        }
    }
    public int countByTipo(tipos.UsuarioTipo tipo){
        try {
            tx = sesion.beginTransaction();
            return sesion.createQuery("FROM Usuario WHERE tipo = '"
                + tipo.toString() +"'").list().size();
        }catch (Exception e) {            
            e.printStackTrace();
            return 0;
        }
    }
    public int countByUsername(String username){
        try {
            tx = sesion.beginTransaction();
            return sesion.createQuery("FROM Usuario WHERE username = '"
                + username +"'").list().size();
        }catch (Exception e) {            
            e.printStackTrace();
            return 0;
        }
    } 
    
    
}
